package com.warehouse.module.business.service.cargoinfo;

import java.util.*;
import javax.validation.*;
import com.warehouse.module.business.controller.admin.cargoinfo.vo.*;
import com.warehouse.module.business.dal.dataobject.cargoinfo.CargoInfoDO;
import com.warehouse.framework.common.pojo.PageResult;
import com.warehouse.framework.common.pojo.PageParam;

/**
 * 货物资料 Service 接口
 *
 * @author Eric
 */
public interface CargoInfoService {

    /**
     * 创建货物资料
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCargoInfo(@Valid CargoInfoSaveReqVO createReqVO);

    /**
     * 更新货物资料
     *
     * @param updateReqVO 更新信息
     */
    void updateCargoInfo(@Valid CargoInfoSaveReqVO updateReqVO);

    /**
     * 收货录入
     * @param createReqVO
     */
    void receiptInput(CargoReceiptVO createReqVO);

    /**
     * 物资打包
     * @param receiptVO
     */
    void packGoods(CargoPackVO receiptVO);

    /**
     * 订单包装审核
     * @param vo
     */
    void packCheck(cargoInfoPackCheckVO vo);

    /**
     * 新增计划
     * @param vo
     */
    void addPlan(CargoInfoAddPlanVO vo);

    /**
     * 仓库出库
     * @param cargoShipmentVO
     */
    void shipmentGoods(CargoShipmentVO cargoShipmentVO);

    /**
     * 安检
     * @param cargoShipmentVO
     */
    void SceneGoods(CargoShipmentVO cargoShipmentVO);

    /**
     * 报关信息
     * @param cargoCustomsVO
     */
    void addCustoms(CargoCustomsVO cargoCustomsVO);

    /**
     * 交单
     * @param cargoShipmentVO
     */
    void addHandUp(CargoShipmentVO cargoShipmentVO);

    /**
     * 新增航线信息
     * @param vo
     */
    void addAirway(CargoAirwayVO vo);

    /**
     * 航班到港
     * @param cargoArrivalVO
     */
    void arrival(CargoArrivalVO cargoArrivalVO);

    /**
     * 待发货打回
     * @param shippedBackVO
     */
    void shippedBack(ShippedBackVO shippedBackVO);

    /**
     * 删除货物资料
     *
     * @param id 编号
     */
    void deleteCargoInfo(Long id);

    /**
     * 获得货物资料
     *
     * @param id 编号
     * @return 货物资料
     */
    CargoInfoRespVO getCargoInfo(Long id);

    CargoInfoDO getById(Long id);

    /**
     * 获得货物资料分页
     *
     * @param pageReqVO 分页查询
     * @return 货物资料分页
     */
    PageResult<CargoInfoRespVO> getCargoInfoPage(CargoInfoPageReqVO pageReqVO);

    List<CargoInfoSumaryVO> sumaryOrderStatus(CargoInfoPageReqVO reqVO);

}